/**
 *
 */
#include <stdio.h>
#include <stdbool.h>

#define MaxSize 10 // 定义栈中元素的最大个数
typedef int DataType;
typedef struct
{
    DataType data[MaxSize]; // 静态数组存放栈中元素
    int top;                // 栈顶指针
} SqStack;

// 初始化栈
void InitStack(SqStack *s)
{
    s->top = -1; // 初始化栈顶指针
}

// 判断栈空
bool StackEmpty(SqStack s)
{
    if (s.top == -1)
    {
        return true;
    }
    else
    {
        return false;
    }
}

// 进栈
bool Push(SqStack *s, DataType data)
{
    if (s->top == MaxSize - 1)
    { // 栈满
        return false;
    }
    s->data[++s->top] = data; // 指针+1,新元素入栈
    return true;
}
// 出栈
bool Pop(SqStack *s, DataType *data)
{
    if (s->top == -1)
    {
        return false; // 空栈
    }

    *data = s->data[s->top--];
    return true;
}

// 获得栈顶元素
bool getStackTop(SqStack *s, DataType *data)
{
    if (s->top == -1)
    {
        return false; // 空栈
    }

    *data = s->data[s->top];
    return true;
}

int main()
{
    SqStack s;
    InitStack(&s);
    Push(&s, 10);
    Push(&s, 20);
    Push(&s, 30);
    // 获得栈顶元素
    DataType data;
    Pop(&s, &data);
    getStackTop(&s, &data);
    printf("栈顶元素为: %d\n", data);
    return 0;
}
/**
 *为什么入栈2次栈顶元素还是10呢?
 */